Security Manager
Identity – Bases para las decisiones de seguridad
Origin Desde donde proviene el código
Signature A qué código corresponde?
java.security.CodeSource
Permission Encapsula el acceso a una operación particular
Incluye un objetivo y una acción
p = new SocketPermission(www.utp.edu.co, connect);
p = new FilePermission(/tmp/file1, *);
Arquitectura criptográfica
Desde el punto de vista de la seguridad, el conjunto de clases de seguridad distribuidas con el Java 2 SDK pueden dividirse en dos subconjuntos:
Clases relacionadas con el control de acceso y la gestión de permisos.
Clases relacionadas con la Criptografía.
Seguridad en Java
Arquitectura Criptográfica de Java (JCA) y la Extension Criptográfica de Java (JCE).
Seguridad en Java
Certification Path
Java Authentication and Authorization Service (JAAS)
Java Generic Security Services (Java GSS-API)
Java Cryptography Extension (JCE)
Java Secure Socket Extension (JSSE)
Simple Authentication and Security Layer (SASL)
Arquitectura de la Criptografía
Java Cryptography Architecture (JCA)
Introducción
JDK 1.1
Resúmenes de mensajes
Firmas digitales
Java 2 SDK
resúmenes de mensajes
X.509
Arquitectura para grano fino, flexible, extensible y control de acceso altamente configurable.
Arquitectura de la Criptografía
Proveedores de servicios criptográficos
Firma digital (DSA)
MD5 y SHA-1
Generador de Claves DSA
Certificados X.509
KeyStore
JCE
Java Cryptography Extension (JCE)
Introducción
Marco de trabajo y de implementación para el cifrado.
Generación y comprobación de claves
Algoritmos de autenticación de mensajes (MAC)
JCE
Introducción
Ayuda para el cifrado simétrico
Ayuda para el cifrado asimétrico
Ayuda para el cifrado en bloque
Cifradores en flujo
Flujos seguros
Objetos sellados
JCE
API JCE
Cifrado simétrico en bloque DES, RC2 e IDEA
Cifrado simétrico en flujo RC4
Encriptación asimétrica RSA
Comprobación de claves
JCE
API JCE
Cifrado Password-Based(PBE)
Algoritmo de autentificación de claves (MAC)
Proveedor de Servicios SunJCE
Una implementación del DES (FIPS PUB 46-1), Triple DES, y algoritmos de encriptación Blowfish en el Electronic Code Book (ECB), Cipher Block Chaining (CBC), Cipher Feedback (CFB), Output Feedback (OFB), y modos Propagating Cipher Block Chaining (PCBC).
Un generador de par de claves Diffie-Hellman para generar un par de valores públicos y privados convenientes para el algoritmo de Diffie-Hellman.
JCE
Proveedor de Servicios SunJCE
Una implementación de HMAC-MD5 y algoritmos keyed-hashing HMAC-SHA1 definido en RFC 2104.
Una implementación del esquema de relleno descrito en PKCS #5.
Una implementación del keystore para el tipo propietario del keystore llamando "JCEKS".
Ejemplos
HMAC-MD5
import java.security.*;import javax.crypto.*;public class initMac { public static void main(String[] args) throws Exception { KeyGenerator kg = KeyGenerator.getInstance("HmacMD5"); SecretKey sk = kg.generateKey(); Mac mac = Mac.getInstance("HmacMD5"); mac.init(sk); byte[] result = mac.doFinal("Hi There".getBytes()); }}
Seguridad en Java
Control de acceso Granularidad
Tools (jar, keytool, jarsigner, policytool)
Modelo de Permisos
Java.security.permission
Políticas de Seguridad
PolicyTool
Gestor de Seguridad: java.security.manager
(Gp:) Clase JCA 1.2
(Gp:) Función
(Gp:) java.security.MessageDigest
(Gp:) Genera resumen de mensajes (hash).
(Gp:) java.security.Signature
(Gp:) Firmado de datos y verificación firmas.
(Gp:) java.security.KeyPairGenerator
(Gp:) Generar pares de claves (pública y privada) para un algoritmo.
(Gp:) java.security.KeyFactory
(Gp:) Convertir claves de formato criptográfico a especificaciones de claves y vice versa
(Gp:) java.security.certificate.CertificateFactory
(Gp:) Crear certificados de clave pública y listas de revocación(CRLs).
(Gp:) java.security.KeyStore
(Gp:) Crear y gestionar un almacen de claves (keystore).
(Gp:) java.security.AlgorithmParameters
(Gp:) Gestionar los parámetros de un algoritmo, incluyendocodificación y descodificación.
(Gp:) java.security.AlgorithmParameterGenerator
(Gp:) Generar un conjunto de parámetros para un algoritmo.
(Gp:) java.security.SecureRandom
(Gp:) Generar números aleatrorios o pseudo aleatrorios
Motor JCA
(Gp:) Clase JCE 1.2
(Gp:) Función
(Gp:) java.crypto.Cipher
(Gp:) Proporciona encriptación y desencriptación.
(Gp:) java.crypto.KeyAgreement
(Gp:) Proporciona un protocolo de intercambio de claves.
(Gp:) java.crypto.KeyGenerator
(Gp:) Proporciona un generador de claves simétricas.
(Gp:) java.crypto.Mac
(Gp:) Proporciona un algoritmo de autentificación de mensajes.
(Gp:) java.crypto.SecretKeyFactory
(Gp:) Representa una factoría de claves secretas.
Motor JCE
Seguridad en Java
JCA & JCE (Java Crypto Architecture, Java Crypto Extensions)
Javax.crypto.interfaces
DHKey
DHPrivateKey
DHPublicKey
Sockets Seguros (JSSE)
Java.security.Cert
X509Certificate, X509CRL
X509Extension
El paquete java.security
El paquete java.security consiste básicamente en clases abstractas e interfaces que encapsulan conceptos de seguridad como certificados, claves, resumenes de mensajes y firmas digitales.
En el JCA los proveedores pueden implementar tres clases:
KeyPairGenerator. Se emplea para crear claves públicas y privadas.
MessageDigest. Prorciona la funcionalidad de algoritmos de resumen de mensajes como el MD5 y el SHA.
Signature. Se emplea para el firmado digital de mensajes.
KeyPairGenerator kpg = KeyPairGenerator.getInstance ("DSA");
Seguridad en Java
El paquete java.security.cert
Añade soporte para generar y usar certificados, incluye clases e interfaces específicas para soportar certificados X.509.
CertificateFactory. Se emplea para generar certificados y listas de revocación (CRL).
Certificate. Es una clase para agrupar certificados de diferentes formatos pero usos comunes importantes
CRL. Clase abstracta para gestionar distintos tipos de listas de revocación de certificados.
X509Certificate. Clase abstracta para representar certificados X.509.
X509CRL. Clase abstracta para una lista de revocación de certificados X.509.
X509CRLEntry. Es una clase abstracta para las entradas de las listas de revocación
Seguridad en Java
Seguridad en Java
Ejemplos:
Perm = new java.io.FilePermission(/tmp/abc,read) //AWT Permission, NetPermission
MessageDigest m = MessageDiggest.getInstance(MD5)
Java.security.MessageDiggest
Java.security.signature
Java.security.KeyPairGenerator
Extensión de Sockets Seguros de Java (JSSE)
http://java.sun.com/products/jsse/
Servicio de Autentificación y Autorización de Java (JAAS)
http://java.sun.com/products/jaas/
Seguridad en Java
Arquitectura de seguridad de .NET
Arquitectura de seguridad de ASP.NET
Configurar la Seguridad en .NET
ACCESO SEGURO A DATOS EN .NET
Acceso a BD de datos mediante ADO.NET
Formas seguras de acceder a la BD
Almacenamiento seguro de secretos
AUTENTICACIÓN MEDIANTE FORMULARIOS EN .NET
Autenticación mediante formularios básica
Autenticación mediante formularios y XML
Autenticación mediante formularios y base de datos
Autenticación mediante formularios y tickets personalizados
Autenticación mediante formularios sin cookies
AUTENTICACIÓN MEDIANTE WINDOWS EN .NET
Autenticación básica
Autenticación mediante resúmenes
Autenticación integrada de Windows
Protección de directorios y documentos
Representación de usuario
AUTENTICACIÓN MEDIANTE CERTIFICADOS EN .NET
Introducción a los certificados digitales
Criptografía con .NET
Autoridades de certificación
Canales seguros con SSL
Autenticación mediante certificados digitales
Acceso a la información de los certificados desde ASP.NET
SEGURIDAD EN SQL SERVER
SEGURIDAD EN SERVICIOS WEB XML DESARROLLADOS CON .NET
Seguridad en .NET
Seguridad de códigoSeguridad en Windows
Autenticación de usuarios
Logon interactivo
Autenticación en red
Control de acceso basado en objetos
Permite limitar los recursos al usuario autenticado
Limitación con aplicaciones no confiadas por el usuario
Mecanismo Todo – Nada
Seguridad de códigoSolución .NET
Desarrollada sobre la seguridad Windows
Nunca podremos tener mayores privilegios
Centrada en el código, no en el usuario
Identificación del código por evidencias
Permite distintos niveles de seguridad
Muy granular
Conjunto estándar de permisos ampliable
Fácil de administrar
Distintos niveles de administración
Seguridad de códigoPermisos
Protección de recursos y operaciones
SecurityPermission
SocketPermission
WebPermission
PrintingPermission
Acceso al interfaz de usuario
UIPermission
Protección de ficheros y directorios
FileIOPermission
FileDialogPermission
Seguridad de códigoPermisos (II)
Acceso al entorno, registro y metadatos
EnvironmentPermission
RegistryPermission
ReflectionPermission
DNSPermission
EventLogPermission
ServiceControllerPermission
Seguridad de códigoPermisos (III)
Protección de datos
DirectoryServicesPermission
IsolatedStorageFilePermission
OleDbPermission
SqlClientPermission
MessageQueuePermission
PerformanceCounterPermission
Autenticación
PrincipalPermission
Seguridad basada en rolesAutenticación y autorización
Autenticación
Proceso que verifica la identidad del usuario
Autorización
Proceso que determina si el usuario puede realizar una operación determinada
Autenticación .NET
Windows
Personalizable
Sólo en ASP.NET
Forms && Passport
Autorización .NET
Seguridad basada en rolesIdentities, principals
Identity
Encapsula información sobre un usuario
Principal
Representa el contexto de seguridad sobre el que corre la aplicación
Incluye:
Usuario actual
Roles del usuario actual
Tres tipos
Windows
Generic
Custom
Seguridad basada en rolesAutorización de Principals
If (MyPrincipal.IsInRole(
))
De forma imperativa con PrincipalPermission
p = new PrincipalPermission(DOMAIN\Usuario
)p.Demand()
De forma declarativa con PrincipalPermissionAttribute
[PrincipalPermissionAttribute(SecurityAction.Demand, Name = DOMAIN\Usuario,
]
Válido para cualquier tipo de Principal
Sin necesidad de cambios
Página anterior | Volver al principio del trabajo | Página siguiente |